home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 June: Reference Library / Dev.CD Jun 99 RL Disk 1.toast / Technical Documentation / Macintosh Technotes and Q&As / technotes / tn / tn_1067.cw < prev    next >
Encoding:
Text File  |  1998-04-27  |  63.6 KB  |  871 lines  |  [TEXT/R*ch]

  1. ıBOBO≈uÈdHZHZHZ‹
  2. ≈uHÿÿH≈u`C"Z ÿÿ≈tÈÿ-Z ÿÿÿ Tom MaremaaxHHÚ(ÿáÿáùEG(üHHØ(d'`Δÿÿ…È‹ œa/ÿ/À?) ≈ud≈vt'¯'¯≈u02)?ffÿñ∑…Ë`°J2 ≈u\! ÿÿÿÿÿÿÿÿ(`QDSET• 0«1ˆ⁄“≈xÌ≈xπ≈uX≈x€°F≈t¸+'°F≈tP?
  3. ¢°F≈tx(F5°F≈vL#6ë°F≈t89#/°F≈uÄ    #~°F##ϰF6$ °F@$•°F#C    -°F≈ux¢
  4. p’’’’ÊÊeÍg͸͒Í ÍNÍ'Ö(Ö)ÖNÍ å¨Í ÍŒì|å≥ÍòÍzÍúÖûÖ     Í    ˝Í
  5. ›Í `Í
  6. úÍhÍi√Í>ööŒöOöÆöYùk…ù|övö#öÓöù¿ÀÒùsùëö
  7. öLöŸö§ùörö ù!ö!vö!Êö"/ù"ùù#,#-#.#/#0#w#x#y#z#{#|#}#~#Ç#È#É˙#Ë#Ì#Í#Î#Ï$$$$$$$$ À$iÀ$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z${$|$}$~$$•$™%|ö&Xö&˙&˚&’ù'‚G'Êù)]ù*%*ô¬+ù,_ù- ù.ˆù/9/:/Bù0ü0§-0ï,1L1\ù1ù1ˆßd+à5
  8. àAàIà¸àICàÏdfie
  9. Óg
  10. Ñ}
  11. Ñ~
  12. àÎ∂
  13. Ñ¿
  14. Ñ™
  15. ≈
  16. Ó(
  17. ˝
  18. ˇ
  19. Ï
  20. Ö
  21. Ó'à)ÓÔMàN
  22. у•
  23. ã ◊§¶¨
  24. ë 
  25. Ó4
  26. Ò;
  27. ӌ
  28. à3ˆ
  29. π˜
  30. í®
  31. íπ
  32.  Õ
  33. íj
  34. l
  35. ‹m
  36. p
  37. í∂
  38. ÕΔ
  39. íê
  40. í{
  41. í|◊∞ Ä≥
  42. ò›
  43. Ó⁄
  44. 
  45. Ó›
  46. ÷
  47. ÓúàûÓÔ     à     
  48. Ñ    ˝
  49. ó    –
  50. …
  51. „
  52. ›
  53. Ó ã
  54. ' ê
  55. ÓiLΩ 0√
  56. ѯ
  57. ¶
  58. Ó>
  59. ÷Ô    øà
  60. ÷    ø
  61. ÷Y
  62. úkº…
  63. ±
  64. ¸
  65. ú|
  66. ÷}    ø≠
  67. ÷    ø
  68. ÷
  69. ú¿    ÀÓHÑ    Ò
  70. c
  71.  q
  72. ú˜
  73. ˇ
  74. úº
  75. ≤
  76. ú¿
  77. À
  78. úë
  79. ÷
  80. 
  81. 
  82. 
  83. ÷v
  84. 
  85. •
  86. ÷§
  87. ú
  88. ÷V
  89. 
  90. _
  91. ÷«
  92. 
  93. µ
  94. ÷ 
  95. ú!
  96. ÷"/
  97. ú#,    #9    #|    #≈    ·#É    Ç#Ë    #Ø    %$ $     Ü$)    Á$j $k
  98. È$™
  99. %|
  100. ÷&k
  101. l&r
  102. ÷&˙    &˚ÓH&¸    &’
  103. '
  104. 
  105.  '
  106. ú'
  107. D'&
  108. ''
  109. ú'*
  110. D'-
  111. ú'‚≤'É
  112. »'Ê
  113. *
  114. àÂ*
  115. &*ó• /*ô +
  116. +9
  117. Ø+@
  118. .
  119. .i
  120. .‘
  121. D.„
  122. ú.ö
  123. ú/9•Æ/:ÓH/A    /B
  124. /„
  125. /Ç
  126. 
  127. /†
  128. /÷
  129. /‡
  130. 00œ ÿ0§/0«
  131. 00Ô
  132. )0Û
  133. 00í/0î
  134. 00ï(0ñ
  135. ∏0ò
  136. E1
  137. 
  138. ∏1L à!1[
  139. "1\
  140. 1ˆ    2 ≈uh˚≈x ¢Ã≈xleS≈uè¸≈xΔ
  141. ’
  142. ≈uÜ
  143. î≈x|q†≈u˘N›≥—d>’≈u|÷ó≈t€ ê≈u°$êó≈up(†≈x¨+ìë≈x˛.◊À≈t°
  144.  
  145.  
  146.  
  147.  
  148.  
  149. ˚T E C H N O T E :
  150. Traditional Device Drivers: Sync or Swim
  151. or IÕve Got the vSyncWait Blues  
  152.  
  153. by Quinn ÒThe Eskimo!Ó
  154.   
  155. Apple Developer Technical Support (DTS)
  156.  
  157. As with any software system, the Mac OS works fine just as long as everybody plays by the rules. For general Toolbox operations, these rules are fairly easy to understand. However, traditional Mac OS device drivers (DRVRs), by their very nature, are complicated programs, and the rules that govern their behavior are harder to understand.
  158. This Technote discusses one of the dangers of writing a traditional Mac OS device driver, namely, the possibility of deadlock when calling another devÃice driver synchronously from a device driver. It demonstrates several ways this deadlock can occur, and then goes on to describe how to avoid the possibility of deadlock.
  159. The Note is intended for developers writing traditional Mac OS device drivers, especially drivers which call other device drivers, and for those with a morbid curiousity about the internals of the traditional Mac OS.
  160.  
  161.  
  162. Two Rules That Govern Device Drivers
  163. There are two important rules about writing traditional Macintosh device drivers.
  164. Rule #1
  165. If your device driver can be called asynchronously and you call another device driver, you must call it asynchronously.
  166. If you donÕt follow Rule #1, you run the risk of deadlocking the systSem, with catastrophic results for the user.
  167. Note: According to Andrew S. Tanenbaum, in Modern Operating Systems, ÒA set of processes is deadlocked if each process in the set is waiting for an event that only another process in the set can cause.Ó For example, if I canÕt finish this Technote until I have a reliable version of your disk driver, and you canÕt make your disk driver reliable until you have read the finished Technote, we are deadlocked. Humans are good at avoiding and recovering from deadlocks, but computers are not. 
  168. Rule #2
  169. If your device driver can be called asynchronously, always operate as if you are being called asynchronously.
  170. In other words, you should not test to see whether this operation is synchronous or asynchronous, and do different things in each case.
  171. If you donÕt follow Rule #2, the system might trick you into doing illegal things at interrupt time, such as breaking Rule #1. 
  172.  
  173. Proof by Example
  174. This section describes two examples of how breaking the rules will cause the system to deadlock. Both examples rely on the following scenario:
  175. You have written a block device driver that fetches disk blocks over the network using the ÒclassicÓ AppleTalk device drivers. When you use the Finder to copy files to the disk image, the system will sometimes deadlock in a routine called vSyncWait. This is much more common when runnin
  176. g Open Transport than when running classic networking.
  177. I chose this example because recently IÕve helped a number of Macintosh developers who are writing such drivers. These people broke the rules and everything seemed to work fine. Unfortunately, Open Transport significantly changed the way AppleTalk is implemented, and the authors suddenly discovered the penalty of breaking the rules: unpredictable system deadlocks. 
  178. When the Finder copies a file, it makes a sequence of chained ioCompletion routines (see ÒAsynchronous Routines on the Macintosh,Ó develop 13) that reads chunks of data from the source volume and writes them to the destination volume. The Finder actually makes File Manager calls but, in cases like this, the File Manager effectively passes these calls st®raight through to the appropriate block device driver.
  179. The next two sections show how your block device driver can deadlock the system by not following these rules.
  180.  
  181. An Example of Breaking Rule #1
  182. Imagine that your device driver breaks Rule #1, i.e., it calls another device driver synchronously. The following is a step-by-step description of how this leads to system deadlock:
  183.     1.    The Finder calls PBReadAsync to read a chunk of the file from the local hard disk. This invokes the File Manager, which invokes the device driver, which invokes the SCSI Manager, which invokes the SCSI hardware.
  184.     2.    The SCSI operation completes. The SCSI hardware interrupts the CPU to inform it of this. The interrupt service routine calls the ioCompletion for the SCSI device driver, which calls the ioCompletion routine for the File Manager, which calls the ioCompletion for the Finder. Because of the nature of the interrupt service routine, interrupts ar†e still disabled at this point.
  185.     3.    The FinderÕs ioCompletion routine calls PBWriteAsync to write the data to the volume mounted on you block device driver. This invokes the File Manager, which invokes your device driver.
  186.     4.    Your device driver calls the AppleTalk device driver synchronously. This is Request A. Unfortunately, the AppleTalk device driver is busy fielding another request (Request B) from a completely independent process, and queues your request waiting for Request B to complete. Your code sits inside the Device ManagerÕs vSyncWait loop, waiting for the Request B to complete.
  187.     5.    The prior networking operation (Request B) completes. The networking hardware attempts to interrupt the CPU to let it know that Request B has completed. Unfortunately the CPU is sitting inside vSyncWait with interrupts disabled Ñ they were disabled by the SCSI hardware when it interrupted the CPU in step 2 Ñ and doesnÕt notice the interrupt from the networking hardware. The system is d›eadlocked.
  188. The basic problem here is that traditional Mac OS device drivers are single threaded, i.e., they can only handle a single request at a time. If you make a second request and the driver is busy and you donÕt give the driver the ability to complete the request, you deadlock.
  189. An Example of Breaking Rule #2
  190. Imagine that your device driver breaks Rule #2, i.e., it tests whether itÕs being called synchronously or asynchronously, and behaves differently in each case. The following is a step-by-step description of how this leads to system deadlock:
  191.     1.    The Finder calls PBWriteAsync to write a chunk of data to your block device driver (Request A). You recognise this request is asynchronous (by testing ioTrap in the ParamBlock), send it to AppleTalk asynchronously, and then return to the Finder.
  192.     2.    Another process calls PBWriteSync to write some data to your driver (Request B). Because your driver is currently busy, this request gets queued in your driverÕs queue.
  193.     3.    The AppleTalk driver ca’lls your ioCompletion routine to signify that your request is done. In response to this you call jIODone. jIODone completes Request A (and calls the FinderÕs ioCompletion routine) and then checks your driverÕs queue for any more pending requests. It notices that Request B is pending, and it calls your device driverÕs Prime to start that Request B. Remember that you are still running at interrupt time.
  194.     4.    Your device driver is called to start Request B. It tests ioTrap, notices that the Request B is synchronous, and so calls AppleTalk synchronously. At this point your driver is calling a device driver synchronously at interrupt time, and you can deadlock the system as described in the previous section.
  195. The basic problem here is that the ioTrap word in a ParamBlock only denotes whether the request was made synchronously, not whether the request is being executed at non-interrupt time.
  196.  
  197. Avoiding Deadlock
  198. The only good way to avoid the probleóms described in the previous section is to issue any device driver calls you make inside your device driver asynchronously.
  199. A traditional Mac OS device driver (DRVR A) that calls another driver (DRVR B) should operate in the following fashion:
  200.     1.    Accept a request (Request A).
  201.     2.    Ignore whether the request is synchronous or asynchronous.
  202.     3.    Asynchronously issue the sub-request (Request B1) to DRVR B.
  203.     4.    Return to the caller.
  204. The sub-request should have an ioCompletion routine. The code for that ioCompletion routine should do the following:
  205.     1.    If this is the last operation we need to do to fulfil Request A, jump to jIODone.
  206.     2.    Otherwise, asynchronously issue another sub-request (Request Bn) to DRVR B with the same ioCompletion routine, and then return to the caller.
  207. Structuring your device driver in this fashion turns your device driver into a state machine. If, for example, you have to issue two sub-requests for each request you receive, your device driver ends up with two states: Request B1, and Request B2. Your completion routine would go:
  208.     1.    Copy the data from the completed sub-request into the main requestÕs result buffer.
  209.     2.    If the state is Request B2, complete the initial request by jumping to jIODone.
  210.     3.    Otherwise, increment the state, issue the next request asynchronously, and return to the caller.
  211. This structure works regardless of whether your driver (DRVR A) is called synchronously or asynchronously, and regardless of whether the driver you are calling (DRVR B) is synchronous or asynchronous. 
  212. Figures 1, 2, 3 and 4 illustrate these four cases.
  213.  
  214.  
  215.  
  216.  
  217. Figure 1    A driver called synchronously, calling a synchronous driver. 
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225. Figure 2   A driver called asynchronously, calling a synchronous driver.
  226.  
  227.  
  228.     
  229.  
  230.  
  231.  
  232.  
  233. Figure 3  A driver called synchronously, calling an asynchronous driver. 
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241. Figure 4  A driver called asynchronously, calling an asynchronous driver
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266. You might think to simplify your life by detecting whether you are being called synchronously or asynchroónously, and changing your operation in each case. While it sounds like a neat idea in theory, it is a very bad idea in practice, for two reasons:
  267.     1.    You have to handle the asynchronous case properly anyway, and if you handle the asynchronous case properly, the synchronous case just works. ThereÕs no point in writing twice as much code when half as much would do.
  268.     2.    You will break Rule #2 and leave yourself open to deadlocks.
  269.  
  270. Exceptions That Prove the Rule
  271. The expression ÒThe Exception Proves the RuleÓ actually means that the exception tests the rule. For Rules #1 and #2, there are two significant exceptions that we must explore in order to understand this topic fully.
  272. Drivers That ArenÕt Called Asynchronously: Exception #1
  273. Many people use traditional Mac OS device drivers for things that donÕt fit the model. The obvious example here are desk accessories, but older programs often use device drivers as a shared library mechanism. Drivers used in this way are not really part of the I/O system, and generally arenÕt called asynchronously. This is the reason for the ÒIf you can be called asynchronouslyÓ clause in the rules.
  274. Note that using device drivers as a shared library mechanism is now strongly discouraged. The Macintosh has a number of real shared library mechanisms that should meet your needs.
  275. Note: If you use a DRVR as a pseudo shared library, you should have your client issue immediate calls to your driver (e.g., PBControlImmed). These calls are sent through to your driver directly, and are not queued in any way. 
  276. Classic SCSI Manager: Exception #2
  277. One case that seems to contradict Rule #1 is the relationship between the File Manager and ÒclassicÓ SCSI device drivers. The ÒclassicÓ epithet refers to SCSI device drivers that were written prior to SCSI Managerë 4.3. These drivers were necessarily synchronous because the SCSI Manager did not support asynchronous operations.
  278. So how is it possible to call the File Manager, which in turn calls the device driver, which calls the SCSI Manager, at interrupt time, even though the SCSI Manager is necessarily synchronous?
  279. The answer is simple: the File Manager contains specific code to support this. When you issue an asynchronous request, the File Manager checks whether the SCSI hardware is already in use. If it is, the File Manager defers the operation of the command until the SCSI hardware is free again. This gets around the potential deadlock, but it contradicts the spirit of Rule #1. 
  280. Note that the File Manager is only able to defer the request becaÀuse the request is asynchronous. If you called to File Manager synchronously, you would deadlock.
  281.  
  282. Summary
  283. Most Macintosh programmers want to play by the rules. Unfortunately, in the case of traditional Mac OS device drivers, the rules are poorly documented and sometimes hard to understand. This Technote explains two important rules for traditional Mac OS device drivers. If you follow them, you will make the system as a whole more reliable. 
  284. Further Reference
  285. n   Asynchronous Routines on the Macintosh,  develop 13, by Jim Luther    
  286. n  Modern Operating Systems, by Andrew S. Tanenbaum, Prentice-Hall, 1992, ISBN 0-13-588187-0
  287. Acknowledgments
  288. Thanks to Brian Bechtel, Jim Luther, and Paul Freeburn. 
  289.  
  290. ZÿÿN°DSET:ÿÿ.He /oÿÿÿÿÿÿ≈t°√ÇΔYذÿÿ ë}ÿÿÜ|eÆ≈uT
  291. H3ÿÿØ3ÁÌÁÌ≈xt
  292. É3ÿÿû3BÌäÌ≈uπ
  293. ‚W3ÿÿö3‹ÌßÌ≈sä
  294. 6ÿÿ*ÇΔY
  295. 'd ≠ ‘  ¡€
  296. hq"„Ï˘Öˆ‹ˆ‹„‹˜Ö˘Ïˆ‹¡¶•
  297. "‰‹###ù##‡≥
  298.  £ ¡  ¡€¡¶••"Δ‰#<# £
  299. h"Δ‰#< ¡ Ÿ ‘  ¡€q"EÛKäHÛHÛEÛHäKÛHÛ¡¶•
  300. "EÜ###ø##‡≥
  301.  £ ¡  ¡€¡¶À•"H‰#H# £
  302. h"H‰#H ¡ Ÿ ‘  ¡€q"–s¶y–v–v–y¶v–s–v¡¶•
  303. "®y#‡##‡ø##≥
  304.  £ ¡  ¡€¡¶À•"fv#H# £
  305. h"fv#H ¡ Ÿ ‘¡ˆ     ,     Helvetica
  306.     .+‰yDevice Manager
  307. *    Request )$A
  308. (—‰ Issue Sync
  309.  ˙ ˜ Ÿ ‘¡ˆ (=¬Stack
  310.  ˙ ˜ Ÿ ‘¡ˆ ÿœÿœ
  311. (kT
  312. hΔΔdmΔdmΔdm••fl•
  313. )ime
  314. 
  315. hΔ™dΔm™dΔm™dΔm**   >p ˙ ˜ Ÿ ‘¡ˆ     (ÜDR)
  316. VR )A
  317. (√Ü Request B1
  318. *    Issue )Async
  319.  ˙ ˜ Ÿ ‘¡ˆ     (∑$DR)
  320. VR B
  321. (⁄$ Request B1
  322. *        Complete
  323.  ˙ ˜ Ÿ ‘  ¡€q"˙ı˛˛˙ˇı˛¡¶•
  324. "˚###ù##‡≥
  325.  £ ¡  ¡€¡¶••"ˆÜ#<# £
  326. h"ˆÜ#< ¡ Ÿ ‘  ¡€q"ƒ_€f¢`¢`ƒ`£f€_¢`¡¶•
  327. " `###ù##‡≥
  328.  £ ¡  ¡€¡¶••"˛$#<# £
  329. h"˛$#< ¡ Ÿ ‘  ¡€q"∏üÂÀÀÂÁü∏À¡¶•
  330. "Ã#ùfl##‡##≥
  331.  £ ¡  ¡€¡¶••"º>#Ä# £
  332. h"º>#Ä ¡ Ÿ ‘¡ˆ     (ë‰Device Manager
  333. *    Request )$A
  334. ÿÿÿ˚(‡‰Return (complete)
  335.  ˙ ˜ Ÿ ‘  ¡€q"¥§ª®¨¨¨¨¥¨©®ª§¨¨¡¶•
  336. "œ¨###ù##‡≥
  337.  £ ¡  ¡€¡¶••"¢l#<# £
  338. h"¢l#< ¡ Ÿ ‘¡ˆ     (—lDR)
  339. VR )A
  340. (‰l Request B2
  341. *    Issue )Async
  342.  ˙ ˜ Ÿ ‘  ¡€q"«ï°ö®›®›«›¯ö°ï®›¡¶•
  343. "¬›###ù##‡≥
  344.  £ ¡  ¡€¡¶••"¨´#<# £
  345. h"¨´#< ¡ Ÿ ‘¡ˆ     (Œ´DR)
  346. VR B
  347. (˚´ Request B2
  348. *        Complete
  349.  ˙ ˜ Ÿ ‘  ¡€q"±7¶>´8´8±8µ>¶7´8¡¶•
  350. "”8###ù##‡≥
  351.  £ ¡  ¡€¡¶••"®ü#<# £
  352. h"®ü#< ¡ Ÿ ‘¡ˆ     (˜üDR)
  353. VR )A
  354. ( üRequest )$A
  355. (©ü    Complete
  356.  ˙ ˜ Ÿ ‘  ¡€q"ôȻƺƺȻǴúƺ¡¶•
  357. "É»#ùfl##‡##≥
  358.  £ ¡  ¡€¡¶••"Àö#Ä# £
  359. h"Àö#Ä ¡ Ÿ ‘  ¡€q"ÉlÎsÌrÌrÎsÍlÉrÌr¡¶•
  360. "Ïs#ùfl##‡##≥
  361.  £ ¡  ¡€¡¶••"Æ®#Ä# £
  362. h"Æ®#Ä ¡ Ÿ ‘  ¡€q"Ï$Ô+Ò*Ò*Ô+Ó$Ï*Ò*¡¶•
  363. "Õ+#ùfl##‡##≥
  364.  £ ¡  ¡€¡¶••"Ìf#Ä# £
  365. h"Ìf#Ä ¡ Ÿ ‘  ¡€q"ÕÜÚãØâØâÚãÙÜÕâØâ¡¶•
  366. "Ûã#ùfl##‡##≥
  367.  £ ¡  ¡€¡¶••"Ò#Ä# £
  368. h"Ò#Ä ¡ Ÿ ‘  ¡€q"Û‰à˝fi˚fi˚à˝ß‰Û˚fi˚¡¶•
  369. "á˝#ùfl##‡##≥
  370.  £ ¡  ¡€¡¶••"ØÖ#Ä# £
  371. h"ØÖ#Ä ¡ Ÿ ∞ÿ
  372. 'd ≠ ‘  ¡€
  373. hq"„Ï˘Öˆ‹ˆ‹„‹˜Ö˘Ïˆ‹¡¶•
  374. "‰‹###ù##‡≥
  375.  £ ¡  ¡€¡¶••"Δ‰#<# £
  376. h"Δ‰#< ¡ Ÿ ‘  ¡€q"EÛKäHÛHÛEÛHäKÛHÛ¡¶•
  377. "EÜ###ø##‡≥
  378.  £ ¡  ¡€¡¶À•"H‰#H# £
  379. h"H‰#H ¡ Ÿ ‘  ¡€q"–s¶y–v–v–y¶v–s–v¡¶•
  380. "®y#‡##‡ø##≥
  381.  £ ¡  ¡€¡¶À•"fv#H# £
  382. h"fv#H ¡ Ÿ ‘¡ˆ     ,     Helvetica
  383.     .+‰yDevice Manager
  384. *    Request )$A
  385. (—‰Issue )A)s)ync
  386.  ˙ ˜ Ÿ ‘¡ˆ (=¬Stack
  387.  ˙ ˜ Ÿ ‘¡ˆ ÿœÿœ
  388. (kT
  389. hΔΔdmΔdmΔdm••fl•
  390. )ime
  391. 
  392. hΔ™dΔm™dΔm™dΔm**   >p ˙ ˜ Ÿ ‘¡ˆ     (ÜDR)
  393. VR )A
  394. (√Ü Request B1
  395. *    Issue )Async
  396.  ˙ ˜ Ÿ ‘¡ˆ     (∑$DR)
  397. VR B
  398. (⁄$ Request B1
  399. *        Complete
  400.  ˙ ˜ Ÿ ‘  ¡€q"˙ı˛˛˙ˇı˛¡¶•
  401. "˚###ù##‡≥
  402.  £ ¡  ¡€¡¶••"ˆÜ#<# £
  403. h"ˆÜ#< ¡ Ÿ ‘  ¡€q"ƒ_€f¢`¢`ƒ`£f€_¢`¡¶•
  404. " `###ù##‡≥
  405.  £ ¡  ¡€¡¶••"˛$#<# £
  406. h"˛$#< ¡ Ÿ ‘  ¡€q"∏üÂÀÀÂÁü∏À¡¶•
  407. "Ã#ùfl##‡##≥
  408.  £ ¡  ¡€¡¶••"º>#Ä# £
  409. h"º>#Ä ¡ Ÿ ‘¡ˆ     (ë‰Device Manager
  410. *    Request )$A
  411. (‡‰Return (is async)
  412.  ˙ ˜ Ÿ ‘  ¡€q"¥§ª®¨¨¨¨¥¨©®ª§¨¨¡¶•
  413. "œ¨###ù##‡≥
  414.  £ ¡  ¡€¡¶••"¢l#<# £
  415. h"¢l#< ¡ Ÿ ‘¡ˆ     (—lDR)
  416. VR )A
  417. (‰l Request B2
  418. *    Issue )Async
  419.  ˙ ˜ Ÿ ‘  ¡€q"«ï°ö®›®›«›¯ö°ï®›¡¶•
  420. "¬›###ù##‡≥
  421.  £ ¡  ¡€¡¶••"¨´#<# £
  422. h"¨´#< ¡ Ÿ ‘¡ˆ     (Œ´DR)
  423. VR B
  424. (˚´ Request B2
  425. *        Complete
  426.  ˙ ˜ Ÿ ‘  ¡€q"±7¶>´8´8±8µ>¶7´8¡¶•
  427. "”8###ù##‡≥
  428.  £ ¡  ¡€¡¶••"®ü#<# £
  429. h"®ü#< ¡ Ÿ ‘¡ˆ     (˜üDR)
  430. VR )A
  431. ( üRequest )$A
  432. (©ü    Complete
  433.  ˙ ˜ Ÿ ‘  ¡€q"ôȻƺƺȻǴúƺ¡¶•
  434. "É»#ùfl##‡##≥
  435.  £ ¡  ¡€¡¶••"Àö#Ä# £
  436. h"Àö#Ä ¡ Ÿ ‘  ¡€q"ÉlÎsÌrÌrÎsÍlÉrÌr¡¶•
  437. "Ïs#ùfl##‡##≥
  438.  £ ¡  ¡€¡¶••"Æ®#Ä# £
  439. h"Æ®#Ä ¡ Ÿ ‘  ¡€q"Ï$Ô+Ò*Ò*Ô+Ó$Ï*Ò*¡¶•
  440. "Õ+#ùfl##‡##≥
  441.  £ ¡  ¡€¡¶••"Ìf#Ä# £
  442. h"Ìf#Ä ¡ Ÿ ‘  ¡€q"ÕÜÚãØâØâÚãÙÜÕâØâ¡¶•
  443. "Ûã#ùfl##‡##≥
  444.  £ ¡  ¡€¡¶••"Ò#Ä# £
  445. h"Ò#Ä ¡ Ÿ ‘  ¡€q"Û‰à˝fi˚fi˚à˝ß‰Û˚fi˚¡¶•
  446. "á˝#ùfl##‡##≥
  447.  £ ¡  ¡€¡¶••"ØÖ#Ä# £
  448. h"ØÖ#Ä ¡ Ÿ ∞ÿ d ≠ ‘  ¡€
  449. hq"„Ï˘Öˆ‹ˆ‹„‹˜Ö˘Ïˆ‹¡¶•
  450. "‰‹###ù##‡≥
  451.  £ ¡  ¡€¡¶••"Δ‰#<# £
  452. h"Δ‰#< ¡ Ÿ ‘  ¡€q"EÛKäHÛHÛEÛHäKÛHÛ¡¶•
  453. "EÜ###ø##‡≥
  454.  £ ¡  ¡€¡¶À•"H‰#H# £
  455. h"H‰#H ¡ Ÿ ‘  ¡€q"–s¶y–v–v–y¶v–s–v¡¶•
  456. "®y#‡##‡ø##≥
  457.  £ ¡  ¡€¡¶À•"fv#H# £
  458. h"fv#H ¡ Ÿ ‘¡ˆ     ,     Helvetica
  459.     .+‰yDevice Manager
  460. *    Request )$A
  461. (—‰ Issue Sync
  462.  ˙ ˜ Ÿ ‘¡ˆ (=¬Stack
  463.  ˙ ˜ Ÿ ‘¡ˆ ÿœÿœ
  464. (kT
  465. hΔΔdmΔdmΔdm••fl•
  466. )ime
  467. 
  468. hΔ™dΔm™dΔm™dΔm**   >p ˙ ˜ Ÿ ‘¡ˆ     (ÜDR)
  469. VR )A
  470. (√Ü Request B1
  471. *    Issue )Async
  472.  ˙ ˜ Ÿ ‘¡ˆ     (∑$DR)
  473. VR B
  474. (⁄$ Request B1
  475. *    Start Hardware
  476.  ˙ ˜ Ÿ ‘¡ˆ     (ljDevice Manager
  477. *    Request )$A
  478. ÿÿ‡<(Ù‰Spin in vSyncW)?ait
  479.  ˙ ˜ Ÿ ‘¡ˆ (ë‰É time passes É
  480.  ˙ ˜ Ÿ ‘¡ˆ     *    Hardware
  481. *     Request B1
  482. *    
  483. Interrupt
  484.  ˙ ˜ Ÿ ‘¡ˆ     (ÜDR)
  485. VR B
  486. ( Ü Request B1
  487. *        Complete
  488.  ˙ ˜ Ÿ ‘¡ˆ     (    $DR)
  489. VR )A
  490. ($ Request B2
  491. *    Issue )Async
  492.  ˙ ˜ Ÿ ‘¡ˆ     (lDR)
  493. VR B
  494. (l Request B2
  495. *    Start Hardware
  496.  ˙ ˜ Ÿ ‘  ¡€q"˙ı˛˛˙ˇı˛¡¶•
  497. "˚###ù##‡≥
  498.  £ ¡  ¡€¡¶••"ˆÜ#<# £
  499. h"ˆÜ#< ¡ Ÿ ‘  ¡€q"ƒ_€f¢`¢`ƒ`£f€_¢`¡¶•
  500. " `###ù##‡≥
  501.  £ ¡  ¡€¡¶••"˛$#<# £
  502. h"˛$#< ¡ Ÿ ‘  ¡€q"«$°+®*®*°+¯$«*®*¡¶•
  503. "±+#ùfl##‡##≥
  504.  £ ¡  ¡€¡¶••"¨f#Ä# £
  505. h"¨f#Ä ¡ Ÿ ‘  ¡€q"±Ü¶ã´â´â¶ãµÜ±â´â¡¶•
  506. "·ã#ùfl##‡##≥
  507.  £ ¡  ¡€¡¶••"®#Ä# £
  508. h"®#Ä ¡ Ÿ ‘  ¡€q"·‰π˝º˚º˚π˝»‰·˚º˚¡¶•
  509. "∏˝#ùfl##‡##≥
  510.  £ ¡  ¡€¡¶••"´Ö#Ä# £
  511. h"´Ö#Ä ¡ Ÿ ‘  ¡€q"ÏÖ‹‹‹ÖÏ‹¡¶•
  512. "‹###ù##‡≥
  513.  £ ¡  ¡€¡¶••"‰#<# £
  514. h"‰#< ¡ Ÿ ‘  ¡€q""  !" ¡¶•
  515. "###ù##‡≥
  516.  £ ¡  ¡€¡¶••"Ü#<# £
  517. h"Ü#< ¡ Ÿ ‘  ¡€q"#_(f&`&`#`'f(_&`¡¶•
  518. "$`###ù##‡≥
  519.  £ ¡  ¡€¡¶••" $#<# £
  520. h" $#< ¡ Ÿ ‘  ¡€q")§.®,¨,¨)¨-®.§,¨¡¶•
  521. "*¨###ù##‡≥
  522.  £ ¡  ¡€¡¶••"&l#<# £
  523. h"&l#< ¡ Ÿ ‘  ¡€q"5l:s8r8r:s9l5r8r¡¶•
  524. ";s#ùfl##‡##≥
  525.  £ ¡  ¡€¡¶••"2®#Ä# £
  526. h"2®#Ä ¡ Ÿ ‘  ¡€q";$@+>*>*@+?$;*>*¡¶•
  527. "A+#ùfl##‡##≥
  528.  £ ¡  ¡€¡¶••"8f#Ä# £
  529. h"8f#Ä ¡ Ÿ ‘  ¡€q"AÜFãDâDâFãEÜAâDâ¡¶•
  530. "Gã#ùfl##‡##≥
  531.  £ ¡  ¡€¡¶••">#Ä# £
  532. h">#Ä ¡ Ÿ ‘  ¡€q"G‰L˝J˚J˚L˝K‰G˚J˚¡¶•
  533. "M˝#ùfl##‡##≥
  534.  £ ¡  ¡€¡¶••"DÖ#Ä# £
  535. h"DÖ#Ä ¡ Ÿ ‘¡ˆ (W‰É time passes É
  536.  ˙ ˜ Ÿ ‘¡ˆ     *    Hardware
  537. *     Request B2
  538. *    
  539. Interrupt
  540.  ˙ ˜ Ÿ ‘¡ˆ     (oÜDR)
  541. VR B
  542. (xÜ Request B2
  543. *        Complete
  544.  ˙ ˜ Ÿ ‘¡ˆ     (u$DR)
  545. VR )A
  546. (~$Request )$A
  547. (Ω$    Complete
  548.  ˙ ˜ Ÿ ‘  ¡€q"∞Ï√Ö∫‹∫‹∞‹ΩÖ√Ï∫‹¡¶•
  549. "≥‹###ù##‡≥
  550.  £ ¡  ¡€¡¶••"•‰#<# £
  551. h"•‰#< ¡ Ÿ ‘  ¡€q"≈⁄‘‘≈Ÿ⁄‘¡¶•
  552. "…###ù##‡≥
  553.  £ ¡  ¡€¡¶••"∫Ü#<# £
  554. h"∫Ü#< ¡ Ÿ ‘  ¡€q"∂_‰f‚`‚`∂`„f‰_‚`¡¶•
  555. "Δ`###ù##‡≥
  556.  £ ¡  ¡€¡¶••"‘$#<# £
  557. h"‘$#< ¡ Ÿ ‘  ¡€q"˝$ +ı*ı* +ƒ$˝*ı*¡¶•
  558. "¡+#ùfl##‡##≥
  559.  £ ¡  ¡€¡¶••"˘f#Ä# £
  560. h"˘f#Ä ¡ Ÿ ‘  ¡€q"¡Üœã€â€âœã¥Ü¡â€â¡¶•
  561. "§ã#ùfl##‡##≥
  562.  £ ¡  ¡€¡¶••"ı#Ä# £
  563. h"ı#Ä ¡ Ÿ ‘  ¡€q"§‰¬˝ª˚ª˚¬˝«‰§˚ª˚¡¶•
  564. "–˝#ùfl##‡##≥
  565.  £ ¡  ¡€¡¶••"€Ö#Ä# £
  566. h"€Ö#Ä ¡ Ÿ ‘¡ˆ     (·‰Device Manager
  567. *    Request )$A
  568. (ɉReturns
  569.  ˙ ˜ Ÿ ∞ÿNd ≠ ‘  ¡€
  570. hq"„Ï˘Öˆ‹ˆ‹„‹˜Ö˘Ïˆ‹¡¶•
  571. "‰‹###ù##‡≥
  572.  £ ¡  ¡€¡¶••"Δ‰#<# £
  573. h"Δ‰#< ¡ Ÿ ‘  ¡€q"EÛKäHÛHÛEÛHäKÛHÛ¡¶•
  574. "EÜ###ø##‡≥
  575.  £ ¡  ¡€¡¶À•"H‰#H# £
  576. h"H‰#H ¡ Ÿ ‘  ¡€q"–s¶y–v–v–y¶v–s–v¡¶•
  577. "®y#‡##‡ø##≥
  578.  £ ¡  ¡€¡¶À•"fv#H# £
  579. h"fv#H ¡ Ÿ ‘¡ˆ     ,     Helvetica
  580.     .+‰yDevice Manager
  581. *    Request )$A
  582. (—‰Issue )Async
  583.  ˙ ˜ Ÿ ‘¡ˆ (=¬Stack
  584.  ˙ ˜ Ÿ ‘¡ˆ ÿœÿœ
  585. (kT
  586. hΔΔdmΔdmΔdm••fl•
  587. )ime
  588. 
  589. hΔ™dΔm™dΔm™dΔm**   >p ˙ ˜ Ÿ ‘¡ˆ     (ÜDR)
  590. VR )A
  591. (√Ü Request B1
  592. *    Issue )Async
  593.  ˙ ˜ Ÿ ‘¡ˆ     (∑$DR)
  594. VR B
  595. (⁄$ Request B1
  596. *    Start Hardware
  597.  ˙ ˜ Ÿ ‘¡ˆ     (ljDevice Manager
  598. *    Request )$A
  599. ÿÿ÷‡(Ù‰Return inProgress
  600.  ˙ ˜ Ÿ ‘¡ˆ *É time passes É
  601.  ˙ ˜ Ÿ ‘¡ˆ     *    Hardware
  602. *     Request B1
  603. *    
  604. Interrupt
  605.  ˙ ˜ Ÿ ‘¡ˆ     (ÜDR)
  606. VR B
  607. ( Ü Request B1
  608. *        Complete
  609.  ˙ ˜ Ÿ ‘¡ˆ     (    $DR)
  610. VR )A
  611. ($ Request B2
  612. *    Issue )Async
  613.  ˙ ˜ Ÿ ‘¡ˆ     (lDR)
  614. VR B
  615. (l Request B2
  616. *    Start Hardware
  617.  ˙ ˜ Ÿ ‘  ¡€q"˙ı˛˛˙ˇı˛¡¶•
  618. "˚###ù##‡≥
  619.  £ ¡  ¡€¡¶••"ˆÜ#<# £
  620. h"ˆÜ#< ¡ Ÿ ‘  ¡€q"ƒ_€f¢`¢`ƒ`£f€_¢`¡¶•
  621. " `###ù##‡≥
  622.  £ ¡  ¡€¡¶••"˛$#<# £
  623. h"˛$#< ¡ Ÿ ‘  ¡€q"«$°+®*®*°+¯$«*®*¡¶•
  624. "±+#ùfl##‡##≥
  625.  £ ¡  ¡€¡¶••"¨f#Ä# £
  626. h"¨f#Ä ¡ Ÿ ‘  ¡€q"±Ü¶ã´â´â¶ãµÜ±â´â¡¶•
  627. "·ã#ùfl##‡##≥
  628.  £ ¡  ¡€¡¶••"®#Ä# £
  629. h"®#Ä ¡ Ÿ ‘  ¡€q"·‰π˝º˚º˚π˝»‰·˚º˚¡¶•
  630. "∏˝#ùfl##‡##≥
  631.  £ ¡  ¡€¡¶••"´Ö#Ä# £
  632. h"´Ö#Ä ¡ Ÿ ‘  ¡€q"ÏÖ‹‹‹ÖÏ‹¡¶•
  633. "‹###ù##‡≥
  634.  £ ¡  ¡€¡¶••"‰#<# £
  635. h"‰#< ¡ Ÿ ‘  ¡€q""  !" ¡¶•
  636. "###ù##‡≥
  637.  £ ¡  ¡€¡¶••"Ü#<# £
  638. h"Ü#< ¡ Ÿ ‘  ¡€q"#_(f&`&`#`'f(_&`¡¶•
  639. "$`###ù##‡≥
  640.  £ ¡  ¡€¡¶••" $#<# £
  641. h" $#< ¡ Ÿ ‘  ¡€q")§.®,¨,¨)¨-®.§,¨¡¶•
  642. "*¨###ù##‡≥
  643.  £ ¡  ¡€¡¶••"&l#<# £
  644. h"&l#< ¡ Ÿ ‘  ¡€q"5l:s8r8r:s9l5r8r¡¶•
  645. ";s#ùfl##‡##≥
  646.  £ ¡  ¡€¡¶••"2®#Ä# £
  647. h"2®#Ä ¡ Ÿ ‘  ¡€q";$@+>*>*@+?$;*>*¡¶•
  648. "A+#ùfl##‡##≥
  649.  £ ¡  ¡€¡¶••"8f#Ä# £
  650. h"8f#Ä ¡ Ÿ ‘  ¡€q"AÜFãDâDâFãEÜAâDâ¡¶•
  651. "Gã#ùfl##‡##≥
  652.  £ ¡  ¡€¡¶••">#Ä# £
  653. h">#Ä ¡ Ÿ ‘  ¡€q"G‰L˝J˚J˚L˝K‰G˚J˚¡¶•
  654. "M˝#ùfl##‡##≥
  655.  £ ¡  ¡€¡¶••"DÖ#Ä# £
  656. h"DÖ#Ä ¡ Ÿ ‘¡ˆ (W‰É time passes É
  657.  ˙ ˜ Ÿ ‘¡ˆ     *    Hardware
  658. *     Request B2
  659. *    
  660. Interrupt
  661.  ˙ ˜ Ÿ ‘¡ˆ     (oÜDR)
  662. VR B
  663. (xÜ Request B2
  664. *        Complete
  665.  ˙ ˜ Ÿ ‘¡ˆ     (u$DR)
  666. VR )A
  667. (~$Request )$A
  668. (Ω$    Complete
  669.  ˙ ˜ Ÿ ‘  ¡€q"∞Ï√Ö∫‹∫‹∞‹ΩÖ√Ï∫‹¡¶•
  670. "≥‹###ù##‡≥
  671.  £ ¡  ¡€¡¶••"•‰#<# £
  672. h"•‰#< ¡ Ÿ ‘  ¡€q"≈⁄‘‘≈Ÿ⁄‘¡¶•
  673. "…###ù##‡≥
  674.  £ ¡  ¡€¡¶••"∫Ü#<# £
  675. h"∫Ü#< ¡ Ÿ ‘  ¡€q"∂_‰f‚`‚`∂`„f‰_‚`¡¶•
  676. "Δ`###ù##‡≥
  677.  £ ¡  ¡€¡¶••"‘$#<# £
  678. h"‘$#< ¡ Ÿ ‘  ¡€q"˝$ +ı*ı* +ƒ$˝*ı*¡¶•
  679. "¡+#ùfl##‡##≥
  680.  £ ¡  ¡€¡¶••"˘f#Ä# £
  681. h"˘f#Ä ¡ Ÿ ‘  ¡€q"¡Üœã€â€âœã¥Ü¡â€â¡¶•
  682. "§ã#ùfl##‡##≥
  683.  £ ¡  ¡€¡¶••"ı#Ä# £
  684. h"ı#Ä ¡ Ÿ ‘  ¡€q"§‰¬˝ª˚ª˚¬˝«‰§˚ª˚¡¶•
  685. "–˝#ùfl##‡##≥
  686.  £ ¡  ¡€¡¶••"€Ö#Ä# £
  687. h"€Ö#Ä ¡ Ÿ ∞ÿDSETHÿÿ.H/Imginÿÿÿÿÿÿ≈x°YF°ÿÿ√ΰÿÿV°ÿÿ˘    fi°ÿÿ
  688.   f°ÿÿ ¨î°ÿÿ0v°ÿÿ¸fl°ÿÿ@∫°ÿÿȰ    ÿÿPˆ°
  689. ÿÿG√° ÿÿϰÿÿW˘°ÿÿ    ß
  690.  °ÿÿ g ¨°ÿÿï0°ÿÿw¸°ÿÿÿ@°ÿÿΩȰÿÿP°    ÿÿ˜Ø°
  691. ÿÿ6ÿÿ*ÇΔYDSET≠ÿÿ.Hh8ûdcÿÿÿÿÿÿ≈s›…@‰A°ÿÿ ÿÿ*…@‰°A †°A
  692. †°A†°A†°A†°A†°A†°A†°A†°A†°A DSETT~@≈x‘≈vp≈x¬≈u¬°A≈v≥A$    "    à;"    à s[ˇP[¥ΔWWl≤[¡‰
  693. •≈uP•
  694. Technote 1067      ///          Release   1.0      © Apple Computer, Inc.      ///            ///          Page     of   11
  695. FNTMCUTSDSUM$ Tom MaremaaHDNISTYL0ÿÿÿ@STYL≈v0≈u4≈u$≈xx≈x≥≈x√≈tX≈v‘
  696. Ìÿÿ…
  697. ÿÿÿÿ"ÿÿÿÿÿÿÿÿÿÿÿÿ
  698. 
  699. ÿÿ$ÿÿX
  700. ÿÿ
  701. &ÿÿ
  702. ÿÿ$ÿÿ
  703. ÿÿÿÿÿÿÿÿÿÿ    ÿÿ ÿÿ        ÿÿ ÿÿÿÿ
  704.     ÿÿ 'ÿÿÿÿ ÿÿ
  705. ÿÿÿÿ ÿÿÿÿÿÿ    
  706. ÿÿÿÿÿÿ    ÿÿ ÿÿ
  707. ÿÿ#ÿÿ ÿÿ$ÿÿ ÿÿ&ÿÿÿÿ
  708. ÿÿ*ÿÿÿÿ ÿÿ-ÿÿÿÿÿÿ%.‹ÿÿÿÿÿÿ/0..ÿÿÿÿ10.."ÿÿÿÿ40.."ÿÿÿÿ60.1"ÿÿÿÿ70.1"    ÿÿÿÿ80.1"
  709. ÿÿÿÿ90.1" ÿÿÿÿ:0.1" ÿÿÿÿ<0.1"
  710. ÿÿÿÿ=0./$ÿÿÿÿ >0./'ÿÿÿÿ!?0.4,ÿÿÿÿ"@0.4"ÿÿÿÿ%#B‹ÿÿÿÿÿÿ$C0BB-ÿÿ%F0BB"ÿÿ&K0BB"ÿÿÿÿ'M0BF,ÿÿ(N0BF"    ÿÿ)O0BF"
  711. ÿÿ*P0BF" ÿÿ+Q0BF" ÿÿ,R0BF"
  712. ÿÿÿÿ-S0BC.ÿÿÿÿ.T0BC/ÿÿÿÿ/U0BK0ÿÿ"0V0BK"ÿÿÿÿ%1W‹ÿÿÿÿÿÿ2X0WW1ÿÿÿÿ3Y0WW2ÿÿÿÿ4Z0WW2ÿÿÿÿ5[0WY3ÿÿÿÿ6\0WY4ÿÿÿÿ7]0WY4
  713. ÿÿÿÿ8^0WY4 ÿÿÿÿ9_0WY4 ÿÿÿÿ:`0WY4
  714. ÿÿÿÿ;a0WX5ÿÿÿÿ<b0WX5ÿÿÿÿ=c0WZ3ÿÿÿÿ>d0WZ4ÿÿÿÿ%?e‹ÿÿÿÿÿÿ@f0ee6ÿÿÿÿAg0ee"    ÿÿÿÿBh0ee"    ÿÿÿÿCi0eg7
  715. ÿÿÿÿDj0eg" ÿÿÿÿEk0eg"!
  716. ÿÿÿÿFm0eg""
  717. ÿÿÿÿGn0eg"#
  718. ÿÿÿÿHo0eg"$
  719. ÿÿÿÿIp0ef:% ÿÿÿÿJq0ef:& ÿÿÿÿKr0eh,'
  720. ÿÿÿÿLs0eh"(ÿÿÿÿ%Mt‹ÿÿÿÿ)ÿÿNu0tt;*ÿÿÿÿOv0tt"+ÿÿÿÿPw0tt", ÿÿÿÿQx0tv,-ÿÿÿÿRy0tv".ÿÿÿÿSz0tv"/ÿÿÿÿT{0tv"0ÿÿÿÿU|0tv"1ÿÿÿÿV}0tv"2ÿÿÿÿW~0tu<7ÿÿÿÿX0tu<8ÿÿÿÿY•0tw05ÿÿÿÿZ™0tw"6ÿÿÿÿ[≠‹ÿÿÿÿ)ÿÿ\∞0≠≠,*
  721. ÿÿO]≥0≠≠"+ÿÿÿÿ^∑0≠≠"3ÿÿÿÿ_∫0≠≥"-ÿÿÿÿ`Ω0≠≥"4ÿÿÿÿa√0≠≥"9ÿÿÿÿb≈0≠≥":ÿÿÿÿc…0≠≥";ÿÿÿÿd—0≠∞=7ÿÿÿÿe‘0≠∑,=ÿÿÿÿfŸ‹ÿÿÿÿ<ÿÿg⁄0ŸŸ>>ÿÿÿÿh∂0ŸŸ?ÿÿÿÿiΔ0Ÿ∂!ÿÿÿÿjŒ0Ÿ∂"ÿÿÿÿk‚0Ÿ∂#ÿÿÿÿl„0Ÿ∂$ÿÿÿÿm‰0Ÿ⁄?Bÿÿÿÿn0Ÿ⁄?CÿÿÿÿoˆØÿÿÿÿÿÿp˜8ˆˆÿÿÿÿq˘8ˆˆÿÿÿÿr˚8ˆˆÿÿÿÿs˝8ˆˆÿÿÿÿt˛8ˆˆÿÿÿÿuˇ8ˆˆÿÿÿÿvı8ˆˆÿÿÿÿwƒ8ˆˆÿÿÿÿx 8ˆˆÿÿÿÿy¡8ˆˆÿÿÿÿz¢8ˆˆÿÿÿÿ{£8ˆˆÿÿÿÿ|€Øÿÿÿÿ@ ÿÿ}¥8€€A!ÿÿÿÿ~œ8€€B#ÿÿÿÿ§8€€C%ÿÿÿÿ•¨8€€D,ÿÿÿÿ™©8€€D1ÿÿÿÿ≠ª8€€D2ÿÿÿÿ∞«8€€D3ÿÿÿÿ≥–8€€D4ÿÿÿÿ∑®8€€D5ÿÿÿÿ∫¯8€€D6ÿÿÿÿ Ω°Øÿÿÿÿ7ÿÿ√±8°°8ÿÿÿÿ≈”8°°9ÿÿÿÿ…“8°°:ÿÿÿÿ—´8°°;ÿÿÿÿ‘µ8°°<ÿÿÿÿŸ    )ÿÿÿÿ⁄Ë     
  722. ÿÿÿÿ∂ÉÿÿËÿÿÿÿΔJ    ÿÿ *ÿÿÿÿŒ†ÿÿJKÿÿ    ‚’     ÿÿÿÿ„ÿÿ%)ÿÿÿÿ‰;ÿÿ!)ÿÿÿÿÿÿ#)ÿÿÿÿˆß     Aÿÿÿÿ˜"    ÿÿ ÿÿÿÿ˘¿ÿÿ"Jÿÿÿÿ7˙Í    ÿÿ Gÿÿÿÿ˚ÑÿÿÍ.ÿÿÿÿ˝ÒÿÿÍ8Hÿÿÿÿ ˛ÓÿÿÍHÿÿÿÿ ˇÖ    ÿÿ IÿÿÿÿıàÿÿÖ)MÿÿÿÿƒãÿÿÍFHÿÿÿÿ å    ÿÿ Oÿÿÿÿ¡ëÿÿÍI.ÿÿÿÿ¢ì    ÿÿ Uÿÿÿÿ£íÿÿìVÿÿÿÿ€òÿÿÍE.ÿÿÿÿ¥óÿÿÍEHÿÿÿÿ,œö    ÿÿ Wÿÿÿÿ§÷ÿÿöXÿÿÿÿ¨øÿÿöKXÿÿÿÿ<©ù    ÿÿ YÿÿÿÿªúÿÿùZÿÿÿÿ«ü    ÿÿ [ÿÿÿÿ¬ÿÿÿüH\ÿÿ˚
  723. –ÿÿù.ÿÿÿÿ®ÿÿù8Zÿÿÿÿ¯    ÿÿ ]ÿÿÿÿ°    ÿÿ)^ÿÿÿÿ± ÿÿùEZÿÿÿÿ”
  724. ÿÿö8Xÿÿÿÿ “    ÿÿ _ÿÿÿÿ´ÿÿN`ÿÿÿÿµÿÿ`ÿÿÿÿ¶    ÿÿ aÿÿÿÿ·ÿÿNbÿÿÿÿ¸ÿÿHbÿÿÿÿ’    ÿÿ cÿÿ–ºÿÿ.ÿÿÿÿ»    ÿÿ dÿÿÿÿπ"ÿÿPeÿÿÿÿ∏%    ÿÿ fÿÿÿÿ≤&ÿÿ%gÿÿÿÿ¿-    ÿÿ hÿÿÿÿÀ/ÿÿ-MiÿÿÿÿÁ0ÿÿ-iÿÿÿÿ    ÿÿ ÿÿÿÿÃ0ÿÿHÿÿÿÿÄ    ÿÿ     ÿÿÿÿÅ%ÿÿbÿÿÿÿÆG    ÿÿ ÿÿÿÿÇ»ÿÿGPÿÿÿÿȬ    ÿÿ +ÿÿÿÿÉ2ÿÿßJ.ÿÿÿÿÊÄÿÿåHÿÿÿÿËDÿÿù*ZÿÿÿÿÌlÿÿö*XÿÿÿÿÍÿÿÍ*HÿÿÿÿÎ'ÿÿÍHÿÿÿÿÏ)ÿÿ-Iiÿÿÿÿ‹+ÿÿ’ÿÿÿÿѶå&ÿÿÿÿÒÆÿÿ+^ÿÿÿÿÓÌÿÿ    ÿÿÔÌ% ÿÿÿÿÕÿÿÍHÿÿÿÿÖÌÍ
  725. ÿÿÿÿ◊ÿÿù.ÿÿÿÿØ,    ÿÿ ÿÿÁÙ∏ÿÿ,iÿÿÿÿÚπÿÿìQVÿÿÿÿÛ ÿÿìIVÿÿÿÿÜÿÿìVÿÿÿÿ†‹ÌìÿÿÿÿfiÕÌì9ÿÿÿÿß3ÿÿìUVÿÿÿÿ    àÊ     ÿÿÿÿáfiÿÿÊL(ÿÿÿÿâ5ÿÿÊV(ÿÿÿÿãAÿÿÊU(ÿÿÿÿäIÿÿÊW(ÿÿäå¸ÿÿÊW(ÿÿÿÿæÏÿÿÊX(ÿÿÿÿçÎÿÿÍU.ÿÿ†èÌÍÿÿÿÿéÔ ÖYÿÿÿÿê◊åZÿÿêëLZÿÿëìºZÿÿéíH Yÿÿìî≤GZÿÿÿÿïÂÿÿ%Ugÿÿÿÿ›Øÿÿù[.ÿÿfiñ
  726. Ìù9ÿÿîòüZÿÿÀó(ÿÿ,MiÿÿÿÿôEÿÿ,iÿÿÿÿõ!$ÿÿÿÿö˙    ÿÿ  ÿÿÿÿ÷·ÿÿbÿÿ´øÇÿÿ˙N`ÿÿÿÿùÀ    ÿÿ -ÿÿ÷úÁÿÿÀbÿÿ·ûÜÿÿÀNbÿÿÿÿüÈÿÿ/ÿÿò‡ ¬Zÿÿÿÿfl
  727. ÿÿÿÿhäÿÿHASH‘
  728. $ÚŸ…ífiÕŸ…íâ˛Ÿ…íæÎŸ…íõÍŸ…ïdƒŸ‘íö˝Ÿ‘óíw˙⁄#íw‚•ïèı‚éïwˇ˙…î Ü˙…î$£˙…îHÛ˙…ô$Ú˙—Í$ß˚í©¢ àù¡àú £ çw Ã´◊‘Môؑ[ÑÛÔ#ÑÛÔ1à"ÔÎá´fiãã%8◊fãµÕá?êä
  729. ëåœ,Œ®,
  730. ◊®,º®,›®,2¡¯ ç°,ɰ,3€Ü,
  731. Ãöb ,Δ_b
  732. ,√Q≈v…˝—À‘,pQqvr˝sÀtåu
  733. v/wTxyyızÃ{,8}QI~v4˝5•À5™å5≠    
  734. 5∞    /5≥    T5∑    y5∫
  735. …ìΪ
  736. …ìáË
  737. …íü
  738. ‘ìâ®
  739. ‘ìó±
  740. óìc©
  741. óì˙’KvVˆ%()*+,00!OIPJCU ø- .    07    18    29    3:CdJWKX    (3
  742. G/    5'%xfly·=y˝;Ù?<Ù    H>ùù&ùB5ù    $4ù    36‡J@‡>‡ ENÿ>\2ï$h-E.F/G0HFK`C/S0T1U2V0ZJY&
  743. & Ñ+ ‡&D.L
  744. õ&è& ñ,Öøí
  745. "A
  746. #B
  747. $]
  748. %^
  749. T‘Ôklij*mG& ∂K&áL ãLæLåLâO&⁄P&
  750. ‚P&‹S&à…”nûHe‡/R‡9b‡:c‡1_‡7`‡8a‡DQfl0g'P•îÔ°•›VÒÌ&Çéîc¯˘í4§˘íBÙ˘íFô˘íGÌ˘ífÏ˚íH”˝í@ó˛í4¨∑ìEœ∑ìS¿∑í8ØÄ&
  751. Ê…í≤—Ìïì∏ΔæÏπûæc» æcÈæcÆ" æÍ¬# æc«#+æcÄ&∏Bµ&∏Uø'«ÿS“'¬8ö.Õ>Å.ÕA¸.ÕBú.ÕUû/ÄS¶/Ä8ùL: QQ& Q&
  752. ŸQ
  753. ?„Q
  754. g‰f&˘fw&˜f¸eg|h“çmh’ÑÚj–◊alq”ºr§élr”◊at¨†áÓt“◊ÅΩz«áoz¶ÕÄ}Bod}©ÓÖoF\
  755. CHAR≈u¨ÿÿÿÿ ÿÿ ÿÿÿú    
  756. ÿò
  757. ÿÿÿúÿÿÿû
  758. ÿÿ•ÿÿÿÿÿÿ
  759. ÿòÓÿÿ    ÿö /ÿÿÿfl 
  760. ÿÿ ÿÿflÿ• /ÿÿ
  761. ÿò
  762. L&ÿß
  763. ÿÿ
  764. ÿÿ
  765. ÿÿ ÿóÿÿÿÿÿÿ    ÿÿÿÿÿÿ ÿû     'ÿØ
  766. ÿÿ àÿé#"ÿ† ÿÿÿ÷ àÿÿÿÿ
  767. ÿÿ"
  768. ÿÿÿû
  769.  ÿÿÿÿ
  770. ÿ÷• (ÿÿÿÿÿÿ• /ÿÿ>ÿÿ"    à(
  771. ÿÿÿÿ    '
  772. ÿÿ>ÿ◊"    àÿ÷ÿÿ%
  773. Gÿÿÿÿÿé    ÿÿÿÿÿÿÿÿ
  774. ÿÿÿÿ•ÿÿ
  775. ÿÿ     -
  776.     ÿÿ
  777.     ÿÿ
  778.     ÿÿ.    ÿÿ
  779.     ÿÿ
  780. 2
  781. 
  782.     1/    ÿÿ*
  783. '2
  784. ÿÿÿÿ
  785. 
  786. ÿö
  787. 6/
  788. ÿÿ        ;        ,
  789. ÿÿ>ÿÿ&    ÿÿ&ÿÿ  ÿÿ&
  790. @&    ÿÿ'ÿÿ
  791. ÿÿÿÿ•
  792. Oÿÿÿÿÿÿ    ÿÿÿÿ ÿÿ&ÿÿ
  793. ÿÿÿÿ    ÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿ    Rÿÿÿÿ
  794. fl÷• ÿÿ
  795. ÿÿ ÿ÷
  796. Sÿÿÿÿ
  797. ÿö
  798. Tÿÿÿÿ
  799. ÿ÷ÿÿÿÿÿÿÿç
  800. ÿÿ ÿ÷
  801. àÿÿ ÿ÷àÿÿ ÿ÷àÿÿ ÿ÷àÿÿÓÿÿÿÿÿï
  802. l:ÿÿHASH?0C1D4AEB ≥""=3$:5;:D7.)/*3    4    )<    *0      H
  803. &P N
  804. Zà è@%èh!     
  805. 9[) *1I∂F+    
  806. 
  807. QÓYà
  808. UàXàWàV
  809. J!82E M
  810. K    /         /Ÿ fD@
  811. CELL≈uÔ!ÿÿÿÿÿ™ÿÿÿ"ÿÿÿÿÿÿü
  812. ÿÿÿÿø
  813. ÿÿøÿÿÿÿÿÿÿÿÿÿ    ÿÿü
  814. ÿÿü
  815. ÿÿø
  816. ÿÿø
  817. ÿÿü
  818. ÿÿÿÿü
  819. ÿÿü
  820. ÿÿøÿÿøøÿÿÿÿÿÿÿÿx≥
  821. ÿÿØ$ ÿÿx• ÿÿØ 
  822. ÿÿÿÿÿÿÿÿÿÿ    ÿÿø
  823. ÿÿø ÿÿ ÿÿ
  824. ÿÿÿÿøÿÿÿÿûÿÿøÿÿøÿÿÿÿÿÿÿÿ    ÿÿÿÿøÿÿÿ ÿÿÿ
  825. ÿÿü
  826. ÿÿü ÿÿøÿÿøÿÿø    ÿÿÿÿø ÿÿø
  827. ÿÿAÿÿÿÿø
  828. ÿÿÿÿÿÿø ÿÿ(Ó
  829. ÿÿ√s ˆAÿÿHASHÿ    
  830.       
  831. 
  832. % &78)xŸx∂Ø1Ø3øøø    ø
  833. ø
  834. *ü ü ?     !
  835. " # $'(
  836. /012
  837. 56<+3*èB…‘Cú>ú
  838. .ú-ú=ú4ú9ú:ú;‡    , öÿÿ
  839. GRPH≈xèàÿÿÿÿÿ•ÿÿÿBÿÿÿÿÎÿÿ
  840. ÿÿÎÿÿ
  841. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿn√ÿÿHASH
  842. 
  843. Ò    Î 
  844. o ,Îj0l
  845. RULR≈v\ÿÿÿÿÿí÷bÿôNN.*à!§˝djliìÌiìÜjøj i›\jÿÿi≠BN.*à!§˝djliìÌiìÜjøj i›\jÿÿ\ÿÿÿ≠Bÿÿi‚Bb•.*à!§˝djliìÌiìÜjøj i›\jÿÿ $ÿÿÿHÿÿÿ‚Bÿÿi˚BN.*à!§˝djliìÌiìÜjøj i›\jÿÿ÷?ÿÿ $ÿÿí÷Rÿ≤≥≥.*à!§˝djliìÌiìÜjøj i›\jÿÿÿªB<ÿÿ     $ÿÿÿÿÿ?ÿÿ$ÿÿHÿÿi÷ÂBdÿÿlÿÿΔÿÿÿzBÿÿ´ÿÿØÿÿüÿÿ ÿÿDÿÿ    hÿÿ÷Cÿÿ
  846. ‘ÿÿ °ÿÿÿÿ$ÿÿÿÿÿHÿÿ‡@ÿÿlÿÿ÷Hÿÿi÷ªB<ÿÿÿCÿÿÿ@ÿÿi÷ZBÿÿizBN.*à!§˝djliìÌiìÜjøj i›\jÿÿΔÿÿí÷jÿ≤≥!!≥.*à!§˝djliìÌiìÜjøj i›\jÿÿ    ÿbBÿÿbB≥.*à!§˝djliìÌiìÜjøj i›\j=ÿÿÿÿÿzBÿÿ´ÿÿØÿÿüÿÿ ÿÿDÿÿ    hÿÿÿÿ$ÿÿHÿÿlÿÿΔÿÿ´>ÿÿÿÿi÷jB?ÿÿÿÿJb•.*à!§˝djliìÌiìÜjøj i›\j@ÿÿÿÿi6ªB<b•.*à!§˝djliìÌiìÜjøj i›\jBÿÿÿÿé÷bC  V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.’,iÏØÿÿibBN.*à!i≤p¥SägÚ°g¥lg¥|g¿˘g¿¬g¨üg¿¨CÿÿÿÿªB<b•.*à!§˝djliìÌiìÜjøj i›\jDÿÿÿÿi÷bG
  847. EÿÿÿÿiÂBdb•.*à!§˝djliìÌiìÜjøj i›\jFÿÿÿÿÂBdb•.*à!§˝djliìÌiìÜjøj i›\jLÿÿÿÿí÷bÿôNN.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.’,iÏØÿÿibBb•.*à!§˝djliìÌiìÜjøj i›\jÿÿbBb•.*à!§˝djliìÌiìÜjøj i›\jÿÿi˚b•.*à!§˝djliìÌiìÜjøj i›\jÿÿÿÂBdÿÿÿZBNÿÿÿÿÿbBÿÿ˚b•.*à!§˝djliìÌiìÜjøj i›\jPÿÿÿÿÿzBÿÿizBb•.*à!§˝djliìÌiìÜjøj i›\jQÿÿÿÿÿbC  V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.’,iÏØRÿÿÿÿÿbG
  848. SÿÿÿÿzBb•.*à!§˝djliìÌiìÜjøj i›\jTÿÿÿÿÿbÿôNN.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.’,iÏØÿÿÿÿÿÿÿjBÿÿybBB b•.*à!§˝djliìÌiìÜjøj i›\jÿÿbBB b•.*à!§˝djliìÌiìÜjøj i›\jÿÿíbÿæNN.*à!§˝djliìÌiìÜjøj i›\jÿÿÿbÿæNN.*à!§˝djliìÌiìÜjøj i›\jÿÿibBN.*à!§˝djliìÌiìÜjøj i›\jÿÿbBN.*à!§˝djliìÌiìÜjøj i›\jÿÿizBN.*à!§˝djliìÌiìÜjøj i›\jÿÿzBN.*à!§˝djliìÌiìÜjøj i›\jÿÿi˚N.*à!§˝djliìÌiìÜjøj i›\jÿÿ˚N.*à!§˝djliìÌiìÜjøj i›\jÿÿíRÿ≤≥≥.*à!§˝djliìÌiìÜjøj i›\jÿÿÿRÿ≤≥≥.*à!§˝djliìÌiìÜjøj i›\jÿÿíjÿ≤≥!!≥.*à!§˝djliìÌiìÜjøj i›\jÿÿÿjÿ≤≥!!≥.*à!§˝djliìÌiìÜjøj i›\jÿÿibB≥.*à!§˝djliìÌiìÜjøj i›\jÿÿijBN.*à!§˝djliìÌiìÜjøj i›\jÿÿjBN.*à!§˝djliìÌiìÜjøj i›\jÿÿybBB N.*à!§˝djliìÌiìÜjøj i›\jÿÿbBB N.*à!§˝djliìÌiìÜjøj i›\jÿÿíbÿôNN.*à!§˝djliìÌiìÜjøj i›\jÿÿÿbÿôNN.*à!§˝djliìÌiìÜjøj i›\j&YÿÿHASH‘≠ÉÕH‘ëÉlGŸÉlŒxËÕMŒáËlI˘≠ÊV˘ûÉıU¢ÃlOıKœ.Öî>
  849. ù*W=ù'7,80Q9v:˝;À<0 ,Qv˝Àå 
  850. /TyıÃ,!Q#v%˝,À1å2    
  851. 3    /4    T5    y6
  852. 0 ≠ÈÁZ ≠È÷/ ëÈXY ëÈ⁄cCRKAÿ?ÿCÿ(G÷
  853. HÿK÷P÷&xÊÁ^ÆáÊX]ÿ"ΔÉ'XΔÉ5i}È:W}ÈHh}É-≤≠ÉgûÈ…f…ÂÁeóÂXdÂX+ ÂX!˚ÂÁ\"ÂX["#ÂX    %¶Ü5`&£ÛH_&£Ü- -Îä5b.»ãHa.»ä--Pÿ)P‡$eJeoùr1Ã2LKUP    flÛ‡ñÔÕ ÖÂòÄÜ„è
  854. ◊ ÍŸ
  855. õ˜ÅÎóÏ‹ØÃÉß≠!"ã#$Ëô%ÆíäΔ&ë'()*+,-./0123456789:;<=>?@ABCDEÌFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqörstuvwxyz{|}~•™≠∞È≥∑∫Ω√≈…—‘Ñ÷å‚ìÇÚÙî˘ùúïÅÊÙÒøü∂à⁄Ó˙çæ†˚˝˛éfiˇê›ÚÛáûŒáˆıâäƒæ çèéêî¡¢£ï›ñô€¥õûœ§¨©ª‡«fl¬–®¯
  856. ° ±”“´µ¶·¸’º »!#π$'∏≤()*+,.¿ÿÿÀÁÜÿÿ$NAMEDefault
  857. Default SSHeaderBodyFooterFootnoteFootnote Index Heading2.H2 HeadingH2.H2Code.CV  Heading1.H1#Italic$ HeadingH3.H3&Bullet*    Checklist-Number.ClassicB Blue Gray 1W Blue Gray 2eColorfult
  858. 3D Table 1≠
  859. 3D Table 2Ÿ
  860. AccountingˆHarvard€Legal°DiamondÌComment0ÿÿDFNTM    HelveticaGenevaPalatino:H
  861. Letter GothicTimes
  862. 
  863. Zapf DingbatsMonacoCourierETBL@FNTM‚„CUTS‚˝DSUM‚£HDNI‚ÏSTYL‚ÙETBLflSÿfl‡üûúùø›ñòóôõö÷
  864.